package com.aliyun.messagemgt.domain.repository;

import com.aliyun.messagemgt.common.dto.send.MsgRecordVO;
import com.aliyun.messagemgt.common.dto.send.Receiver;
import com.aliyun.messagemgt.dto.MsgHandleLog;
import com.aliyun.messagemgt.dto.query.MsgHandleLogQuery;
import com.aliyun.messagemgt.dto.vo.MsgHandleLogResultVO;
import com.aliyun.messagemgt.dto.vo.SmsTrendResultVO;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDate;
import java.util.Date;
import java.util.List;

/**
 * @Description
 * @Author hzw
 * @Date 2020/12/16 16:23
 * @Version 1.0
 */
public interface MsgHandleLogRepository {


    /**
     * 查询推送失败数量
     *
     * @param msgId
     * @return
     */
    int queryPushResult(Long msgId);

    /**
     * 查询消息处理记录表3个月前数据
     *
     * @param historyDay
     * @param pageNum
     * @param pageSize
     * @return
     */
    List<MsgHandleLog> queryHistoryMsg(LocalDate historyDay, int pageNum, int pageSize);

    /**
     * 查询消息处理记录表3个月前数据
     *
     * @param historyDay
     * @param pageNum
     * @param pageSize
     * @return
     */
    List<MsgHandleLog> queryDevHistoryMsg(LocalDate historyDay, String sourceName, int pageNum, int pageSize);

    /**
     * 删除消息处理记录表中数据
     *
     * @param msgHandleLogs
     * @return
     */
    int deleteHistoryMsg(List<MsgHandleLog> msgHandleLogs);

    /**
     * 更新用户是否已读消息
     *
     * @param msgHandleLogQuery
     * @return
     */
    int updateStateRead(MsgHandleLogQuery msgHandleLogQuery);

    /**
     * 查询短信概览统计（以天为维度）
     *
     * @param msgSourceId 消息源
     * @param beginDate   开始时间 yyyy-MM-dd
     * @param endDate     结束时间 yyyy-MM-dd
     * @param tempEndDate 临时表结束时间 yyyy-MM-dd
     * @return map
     */
    List<SmsTrendResultVO.SmsTrend> queryDayTrend(String msgSourceId, String beginDate, String endDate, String tempEndDate);

    /**
     * 查询短信概览统计（以月度为维度）
     *
     * @param msgSourceId 消息源
     * @param beginDate   开始时间 yyyy-MM
     * @param endDate     结束时间 yyyy-MM
     * @param monthLimit  limit 值
     * @return map
     */
    List<SmsTrendResultVO.SmsTrend> queryMonthTrend(String msgSourceId, String beginDate, String endDate, Integer monthLimit);

    /**
     * 批量插入
     *
     * @param msgRecordVos
     * @return
     */
    int batchMsgHandleLogInsert(List<MsgRecordVO> msgRecordVos);

    /**
     * 根据消息源id 及时间范围查询 操作失败的日志
     *
     * @param msgSourceId 消息源id
     * @param beginTime   开始时间
     * @param endTime     结束时间
     * @return 失败的操作日志结果集
     */
    List<MsgHandleLogResultVO> queryErrorMsgHandleLogsBySourceId(@Param("msgSourceId") String msgSourceId, @Param("beginTime") Date beginTime, @Param("endTime") Date endTime);

    /**
     * 根据渠道id 查询操作失败的日志
     * @param channelId 渠道id
     * @param beginTime 开始时间
     * @param endTime   结束时间
     * @return list
     */
    List<MsgHandleLogResultVO> queryErrorMsgHandleLogsByChannelName(@Param("channelId") Integer channelId, @Param("beginTime") Date beginTime, @Param("endTime") Date endTime);

    /**
     * 根据渠道类型 查询操作失败的日志
     * @param channelType 渠道类型
     * @param beginTime 开始时间
     * @param endTime   结束时间
     * @return list
     */
    List<MsgHandleLogResultVO> queryErrorMsgHandleLogsByChannelType(@Param("channelType") Integer channelType, @Param("beginTime") Date beginTime, @Param("endTime") Date endTime);

    /**
     * 更新日志推送结果
     * @param msgHandleLog
     */
    void updateByMsgId(@Param("msgHandleLog") MsgHandleLog msgHandleLog);

    /**
     * 更新日志推送结果
     * @param msgHandleLog
     * @param receiverList
     */
    void updatePushResult(MsgHandleLog msgHandleLog, List<Receiver> receiverList);
}
